package pers.baiban.sqltoword.config;

import lombok.Data;
import lombok.experimental.Accessors;
import org.apache.poi.xwpf.usermodel.ParagraphAlignment;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.STBorder;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.STVerticalJc;
import pers.baiban.sqltoword.enums.FontSize;

import java.math.BigInteger;
import java.util.List;

/**
 * 表格参数
 *
 * @author 强子初
 * @since 2023/11/29
 */
@Data
@Accessors(chain = true)
public class TableParam {

    /**
     * 表格标题样式
     */
    private String titleTextFormat;

    /**
     * 表格标题字体
     */
    private String titleFontFamily;

    /**
     * 表格标题字大小
     */
    private Double titleFontSize;

    /**
     * 表头
     */
    private List<String> tableHeader;

    /**
     * 表头宽度
     */
    private List<String> tableHeaderWidth;

    /**
     * 展示行和行顺序
     */
    private List<String> tableColumn;

    /**
     * 表格上边框样式
     */
    private STBorder.Enum tableBorderTop;

    /**
     * 表格上边框宽度
     */
    private BigInteger tableBorderTopWidth;

    /**
     * 表格下边框样式
     */
    private STBorder.Enum tableBorderBottom;

    /**
     * 表格下边框宽度
     */
    private BigInteger tableBorderBottomWidth;

    /**
     * 表格左边框样式
     */
    private STBorder.Enum tableBorderLeft;

    /**
     * 表格左边框宽度
     */
    private BigInteger tableBorderLeftWidth;

    /**
     * 表格右边框样式
     */
    private STBorder.Enum tableBorderRight;

    /**
     * 表格右边框宽度
     */
    private BigInteger tableBorderRightWidth;

    /**
     * 表格横条边框样式
     */
    private STBorder.Enum tableBorderInsideV;

    /**
     * 表格横条边框宽度
     */
    private BigInteger tableBorderInsideVWidth;

    /**
     * 表格竖条边框样式
     */
    private STBorder.Enum tableBorderInsideH;

    /**
     * 表格竖条边框宽度
     */
    private BigInteger tableBorderInsideHWidth;

    /**
     * 表格单元格水平对齐方式
     */
    private ParagraphAlignment tableCellAlignment;

    /**
     * 表格单元格垂直对齐方式
     */
    private STVerticalJc.Enum tableCellSTVerticalJc;

    /**
     * 表格单元格字体
     */
    private String tableCellFontFamily;

    /**
     * 表格单元格字号
     */
    private Double tableCellFontSize;

    /**
     * 表头下边框样式
     */
    private STBorder.Enum headerBorderBottom;

    /**
     * 表头下边框宽度
     */
    private BigInteger headerBorderBottomWidth;

    /**
     * 表头背景颜色
     */
    private String headerColor;

    /**
     * 设置表格边框样式
     */
    public TableParam setTableBorder(STBorder.Enum tableBorder) {
        this.tableBorderTop = tableBorder;
        this.tableBorderBottom = tableBorder;
        this.tableBorderLeft = tableBorder;
        this.tableBorderRight = tableBorder;
        this.tableBorderInsideV = tableBorder;
        this.tableBorderInsideH = tableBorder;
        return this;
    }

    /**
     * 设置表格边框宽度
     */
    public TableParam setTableBorderWidth(BigInteger borderWidth) {
        this.tableBorderTopWidth = borderWidth;
        this.tableBorderBottomWidth = borderWidth;
        this.tableBorderLeftWidth = borderWidth;
        this.tableBorderRightWidth = borderWidth;
        this.tableBorderInsideVWidth = borderWidth;
        this.tableBorderInsideHWidth = borderWidth;
        return this;
    }

    /**
     * 设置表格单元格文字
     *
     * @param family 字体
     * @param size   字号
     */
    public TableParam setTableCellFont(String family, Double size) {
        this.tableCellFontFamily = family;
        this.tableCellFontSize = size;
        return this;
    }
}